<?


JCAT_Package::ImportClass( ROOT_PATH.'Classes/Coder/class.CoderDocBase.php') ;

class ViewHtmlDoc extends ViewDoc 
{
	
	/**
	 * what's this
	 * 
	 * @access	public
	 * @param	$sPath=''	string	What's this Parameter ?
	 * @return	array
	 */
	public function ViewHtmlDoc($sPath='')
	{
		$this->ViewDoc( __CLASS__, $sPath ) ;
	}

	/**
	 * what's this
	 * 
	 * @access	public
	 * @return	string
	 */
	public function GetObjectClass()
	{
		return 'JCAT_ViewHtml' ;
	}
	
	static public function GetControllerClassName()
	{
		return 'ViewHtml' ;
	}


	/**
	 * What's this Method ?
	 * 
	 * @access	protected
	 * @return	void
	 */
	protected function CreateNewDocument()
	{
		// 创建 新的文件 内容 :::::::::::::::::::
		$aTemplate = new JCAT_UIHtml() ;
		$aTemplate->SetVar('TheDoc',$this) ;
		
		// 模版文件
		$sTemplateFile = dirname(__FILE__).'/template.ViewHtml.php' ;
	
		// 产生内容
		$sNewSource = $aTemplate->Display( $sTemplateFile,false) ;
		
		// 调用 父类 创建一个空文件
		parent::CreateNewDocument() ;
		
		// 写入新文件
		file_put_contents($this->GetPath(),$sNewSource) ;
	}

	/**
	 * 将序列化以后的内容存入到 文档
	 * 
	 * @access	protected
	 * @param	$sPath				文件路径
	 * @param	$sByteContents		字节内容
	 * @param	$bAsBinary			作为二进制存储
	 * @return	bool
	 */
	protected function SaveToFile( $sPath, $sByteContents, $bAsBinary=false )
	{
		// 调用父类
		parent::SaveToFile( $sPath, $sByteContents, $bAsBinary ) ;

		// 创建 模版文件
		$sUITemplatePath = $this->Get('UITemplatePath') ;
		$sUITemplatePath = dirname($sPath).'/'.$sUITemplatePath ;
		if( !file_exists($sUITemplatePath) )
		{
			$aSubDoc  = $this->GetDocument('UICtrlChildren') ;
			$arrUICtrls = $aSubDoc->Get('Children') ;
			
			$aTemplate = new JCAT_UIHtml() ;
			$aTemplate->SetVar('arrUICtrls',$arrUICtrls) ;
			$aTemplate->SetVar('TheDocument',$this) ;
			
			$sNewSource = $aTemplate->Display( dirname(__FILE__).'/template.ViewHtml.html',false) ;
		
			file_put_contents($sUITemplatePath,$sNewSource) ;
		}
		
		// 完成 返回 
		return true ;
	}
	
	public function CreateCode_CallParentConstruct()
	{
		$sParentClass = $this->GetObjectClass() ;
		$sViewName = $this->Get('ViewName') ;
		$sTemplateFile = $this->Get('UITemplatePath') ;
		if( $this->Get('InTemplateDir') )
		{
			$sTemplateFile = basename($sTemplateFile) ;
		}

		return "		\$this->{$sParentClass}('{$sViewName}',\$aParent,'{$sTemplateFile}',\$aUI) ;" ;
	}

	public function CreateCode_ExtendsAndImplements()
	{
		$sParentClass = $this->Get('ImplementsIViewForm')?
							'JCAT_ViewHtmlForm' :
							$this->GetObjectClass() ;
		return "	extends {$sParentClass}" ;
	}
	
	/**
	 * what's this
	 * 
	 * @access	public
	 * @return	string
	 */
	public function CreateCode_ForControllerMainRun()
	{
		$sTab = str_repeat("\t",2) ;
		$arrCodeLines = array() ;
		$sName = $this->Get('ViewName') ;
		
		$arrCodeLines[] = "{$sTab}// ". JCAT_Language::Sentence('视图: %s',$sName) ;
		$arrCodeLines[] = "{$sTab}\$aView = \$this->GetView('{$sName}') ;" ;
		$arrCodeLines[] = "{$sTab}JCAT_ASSERT::ASSERT_INSTANCE(\$aView,'JCAT_IView',JCAT_Language::Sentence('名为 %s 的视图未定义','{$sName}')) ;" ;
		$arrCodeLines[] = '' ;

		// Form 视图
		if( $this->Get('ImplementsIViewForm') )
		{
			$arrCodeLines[] = "{$sTab}// " . JCAT_Language::Sentence('提交表单视图 %s',$sName) ;
			$arrCodeLines[] = "{$sTab}if( \$aView->IsSubmitingForm() ) " ;
			$arrCodeLines[] = "{$sTab}{" ;
			$arrCodeLines[] = "{$sTab}	\$aView->SetDataFromSubmited() ;" ;
			$arrCodeLines[] = '' ;
			$arrCodeLines[] = "{$sTab}	// ". JCAT_Language::Sentence('用户输入校验') ;
			$arrCodeLines[] = "{$sTab}	if( \$aView->VerifyData() )" ;
			$arrCodeLines[] = "{$sTab}	{" ;
			$arrCodeLines[] = "{$sTab}		// TODO ... ..." ;
			$arrCodeLines[] = "{$sTab}		// ... ..." ;
			$arrCodeLines[] = "{$sTab}	}" ;
			$arrCodeLines[] = "{$sTab}}" ;
		
		}
		
		// Html 视图
		else
		{
			$arrCodeLines[] = "{$sTab}// " . JCAT_Language::Sentence('显示视图 %s',$sName) ;			
			$arrCodeLines[] = "{$sTab}\$aView->ShowView() ;" ;
		}

		
		return implode("\r\n",$arrCodeLines) ;
	}
}
?>